home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #2 / Monster Media No. 2 (Monster Media)(1994).ISO / pcboard / dwnld30b.zip / DWNLD.PPS < prev    next >
Text File  |  1994-07-13  |  29KB  |  731 lines

  1. ;┌───────────────────────────────────────────────────────────────────────────┐
  2. ;│                              DWNLD.PPE v2.2                               │
  3. ;│                       PCBOARD 15.1 Download Counter                       │
  4. ;│                                                                           │
  5. ;│                        Written by Steven Hauswirth                        │
  6. ;│                  Written in PCBoard Programming Language                  │
  7. ;│                                                                           │
  8. ;│                          The Power Palace BBS                             │
  9. ;│                 Node 1 - 312-594-0643 - [28.8] - 80486/40                 │
  10. ;│                                                                           │
  11. ;│   This PPE is a full screen download counter that informs the user how    │
  12. ;│   many files, bytes, et cetera they have flagged for download.            │
  13. ;└───────────────────────────────────────────────────────────────────────────┘
  14.  
  15. STRING TEMP, CONFIG_FILE
  16. INTEGER LANG_FLAG
  17. LANG_FLAG = 0
  18. IF (EXIST(PPEPATH()+PPENAME()+LANGEXT())) THEN
  19.     CONFIG_FILE = PPEPATH()+PPENAME()+LANGEXT()
  20. ELSE
  21.     CONFIG_FILE = PPEPATH()+PPENAME()+".CFG"
  22.     LANG_FLAG = 1
  23. ENDIF
  24. IF (!ANSION()) THEN
  25.        TEMP = READLINE(CONFIG_FILE,1)
  26.        PRINT TEMP
  27.        GOTO EXIT
  28. ENDIF
  29.  
  30. ;┌───────────────────────────────────────────────────────────────────────────┐
  31. ;│ Declare Variable Types                                                    │
  32. ;└───────────────────────────────────────────────────────────────────────────┘
  33. STRING Y, FILE_NAME, FLAG_FILE, NO_TIME, FREE_FILE, TEMP_FILE
  34. STRING FLIST_TIME, TEMP_TIME, HEADER, FOOTER, SPACES, REM_FILE
  35. STRING BORDER_COLOR, TITLE_COLOR, BAR_COLOR, CENTER_SPACES
  36. STRING SHOW_NUM, SHOW_SIZE, SHOW_DATE, SHOW_TIME, SHOW_FREE, SHOW_NOTIME
  37. string LANG_YES, LANG_NO, FILE_COLOR, OUT_FOOTER
  38. INTEGER COUNT, LOOP, BAT_MIN, BAT_SEC, BAT_TIME, FILE_SEC, FILE_MIN
  39. INTEGER TEMP1, TEMP2, TEMP3, FILE_SIZE, FILE_NUM, AMOUNT_SPACES, SHOW_AMOUNT
  40. INTEGER CONSTANT1, CONSTANT2, FLIST_TOTAL_DATE, FLIST_TOTAL_TIME
  41. INTEGER TEMP_TOTAL_DATE, TEMP_TOTAL_TIME, SKIP_FLAG, EXTRA, UP_FILE_NUM
  42. DATE FILE_DATE, FLIST_DATE, TEMP_DATE
  43. INTEGER TOTAL_FILE_NUM
  44. string NUM_COLOR, SIZE_COLOR, DATE_COLOR, TIME_COLOR, FREE_COLOR, NOTIME_COLOR
  45. STRING NUM_WORD, SIZE_WORD, DATE_WORD, TIME_WORD, FREE_WORD, NOTIME_WORD
  46. STRING FILE_WORD, LANG_MIN, LANG_SEC, LANG_FILES, DOWN_CHAR, REMOVE_CHAR
  47. STRING SIZE_SPACES, DATE_SPACES, TIME_SPACES, FREE_SPACES, NOTIME_SPACES
  48. STRING FILE_CHAR, PROT_DAT, PROT_NAME, AVAIL_PROT, WHICH_PROT, UP_CHAR
  49. INTEGER FILE_CHAR_NUM, POS_X, POS_Y, NUM_BYTES, REMOVE_SIZE, BREAK_FLAG
  50. STRING COMPRESS1, COMPRESS2, VIEW_CHAR, PROT_CHAR, REM_CHAR, CONT_CHAR
  51. STRING SEARCH_TEXT
  52. ;┌───────────────────────────────────────────────────────────────────────────┐
  53. ;│ Initialize the variables and get the temp and flagged file names          │
  54. ;└───────────────────────────────────────────────────────────────────────────┘
  55. WRUNET PCBNODE(),"Q",UN_NAME(),UN_CITY(),"Using: DWNLD.PPE"," "
  56. IF (PCBNODE() = 0) THEN
  57.     LET FLAG_FILE = GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST."
  58. ELSE
  59.     LET FLAG_FILE = GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST."+STRING(PCBNODE())
  60. ENDIF
  61. LET TEMP_FILE = GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST.TMP"
  62. LET SPACES = "                                         "
  63. LET FILE_NUM = 0
  64. BAT_TIME = 0
  65. BREAK_FLAG = 0
  66. TEMP1 = 0
  67. TEMP2 = 0
  68. TEMP3 = 0
  69. EXTRA = 0
  70. LET Y = 1
  71. LET CONSTANT1 = 10000
  72. LET CONSTANT2 = 100
  73. LET AMOUNT_SPACES = 16
  74. LET SHOW_AMOUNT = 2
  75. LET LOOP = 1
  76. NUM_COLOR = "@X0F"
  77. FILE_COLOR = "@X0F"
  78. SIZE_COLOR = "@X0F"
  79. DATE_COLOR = "@X0F"
  80. TIME_COLOR = "@X0F"
  81. FREE_COLOR = "@X0F"
  82. NOTIME_COLOR = "@X0F"
  83.  
  84. ;┌───────────────────────────────────────────────────────────────────────────┐
  85. ;│ Find the NATIVE "yes" and "no" characters for the language in effect      │
  86. ;└───────────────────────────────────────────────────────────────────────────┘
  87. IF (LANG_FLAG = 0) THEN
  88.     LANG_NO = NOCHAR()
  89.     LANG_YES = YESCHAR()
  90. ELSE
  91.     LANG_YES = "Y"
  92.     LANG_NO = "N"
  93. ENDIF
  94.  
  95. ;┌───────────────────────────────────────────────────────────────────────────┐
  96. ;│ Calculate the time and date of the flagged file list                      │
  97. ;└───────────────────────────────────────────────────────────────────────────┘
  98. FLIST_DATE = FILEINF(FLAG_FILE,2)
  99. LET FLIST_TOTAL_DATE = MONTH(FILEINF(FLAG_FILE,2))*CONSTANT2 + DAY(FILEINF(FLAG_FILE,2))
  100. FLIST_TIME = FILEINF(FLAG_FILE,3)
  101. LET FLIST_TOTAL_TIME = HOUR(FLIST_TIME)*CONSTANT1 + MIN(FLIST_TIME)*CONSTANT2 + SEC(FLIST_TIME)
  102.  
  103. ;┌───────────────────────────────────────────────────────────────────────────┐
  104. ;│ Read Config File to see if file numbers are to be displayed               │
  105. ;└───────────────────────────────────────────────────────────────────────────┘
  106. TEMP = TRIM(TEMP,CHR(32))
  107. FOPEN 2, CONFIG_FILE, O_RD, S_DN
  108. FGET 2, SHOW_NUM
  109. FGET 2, SHOW_NUM
  110. LET SHOW_NUM = UPPER(SHOW_NUM)
  111. IF (SHOW_NUM = LANG_YES) THEN
  112.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  113.    FGET 2, NUM_WORD
  114.    IF (LEFT(NUM_WORD,2) = "@X") NUM_COLOR = LEFT(NUM_WORD,4)
  115. ELSE
  116.    AMOUNT_SPACES = AMOUNT_SPACES + 4
  117. ENDIF
  118. FGET 2, FILE_WORD
  119. IF (LEFT(FILE_WORD,2) = "@X") FILE_COLOR = LEFT(FILE_WORD,4)
  120.  
  121. ;┌───────────────────────────────────────────────────────────────────────────┐
  122. ;│ Read Config file to see if File Size is to be displayed                   │
  123. ;└───────────────────────────────────────────────────────────────────────────┘
  124. FGET 2, SHOW_SIZE
  125. LET SHOW_SIZE = UPPER(SHOW_SIZE)
  126. IF (SHOW_SIZE = LANG_YES) THEN
  127.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  128.    FGET 2, SIZE_WORD
  129.    IF (LEFT(SIZE_WORD,2) = "@X") SIZE_COLOR = LEFT(SIZE_WORD,4)
  130.    SIZE_SPACES = (10-LEN(STRIPATX(SIZE_WORD)))/2
  131. ELSE
  132.    AMOUNT_SPACES = AMOUNT_SPACES + 10
  133. ENDIF
  134.  
  135. ;┌───────────────────────────────────────────────────────────────────────────┐
  136. ;│ Read Config File to see if File Date is to be Displayed                   │
  137. ;└───────────────────────────────────────────────────────────────────────────┘
  138. FGET 2, SHOW_DATE
  139. LET SHOW_DATE = UPPER(SHOW_DATE)
  140. IF (SHOW_DATE = LANG_YES) THEN
  141.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  142.    FGET 2, DATE_WORD
  143.    IF (LEFT(DATE_WORD,2) = "@X") DATE_COLOR = LEFT(DATE_WORD,4)
  144.    DATE_SPACES = (8-LEN(STRIPATX(DATE_WORD)))/2
  145. ELSE
  146.    AMOUNT_SPACES = AMOUNT_SPACES + 8
  147. ENDIF
  148.  
  149. ;┌───────────────────────────────────────────────────────────────────────────┐
  150. ;│ Read Config File to see if File Transfer Time is to be Displayed          │
  151. ;└───────────────────────────────────────────────────────────────────────────┘
  152. FGET 2, SHOW_TIME
  153. LET SHOW_TIME = UPPER(SHOW_TIME)
  154. IF (SHOW_TIME = LANG_YES) THEN
  155.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  156.    FGET 2, TIME_WORD
  157.    IF (LEFT(TIME_WORD,2) = "@X") TIME_COLOR = LEFT(TIME_WORD,4)
  158.    TIME_SPACES = (15-LEN(STRIPATX(TIME_WORD)))/2
  159. ELSE
  160.    AMOUNT_SPACES = AMOUNT_SPACES + 15
  161. ENDIF
  162.  
  163. ;┌───────────────────────────────────────────────────────────────────────────┐
  164. ;│ Read Config File to see if Free File Check is to be Displayed             │
  165. ;└───────────────────────────────────────────────────────────────────────────┘
  166. FGET 2, SHOW_FREE
  167. LET SHOW_FREE = UPPER(SHOW_FREE)
  168. IF (SHOW_FREE = LANG_YES) THEN
  169.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  170.    FGET 2, FREE_WORD
  171.    IF (LEFT(FREE_WORD,2) = "@X") FREE_COLOR = LEFT(FREE_WORD,4)
  172.    FREE_SPACES = (4-LEN(STRIPATX(FREE_WORD)))/2
  173. ELSE
  174.    AMOUNT_SPACES = AMOUNT_SPACES + 4
  175. ENDIF
  176.  
  177. ;┌───────────────────────────────────────────────────────────────────────────┐
  178. ;│ Read Config File to see if No Time check is to be Displayed               │
  179. ;└───────────────────────────────────────────────────────────────────────────┘
  180. FGET 2, SHOW_NOTIME
  181. LET SHOW_NOTIME = UPPER(SHOW_NOTIME)
  182. IF (SHOW_NOTIME = LANG_YES) THEN
  183.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  184.    FGET 2, NOTIME_WORD
  185.    IF (LEFT(NOTIME_WORD,2) = "@X") NOTIME_COLOR = LEFT(NOTIME_WORD,4)
  186.    NOTIME_SPACES = (6-LEN(STRIPATX(NOTIME_WORD)))/2
  187. ELSE
  188.    AMOUNT_SPACES = AMOUNT_SPACES + 7
  189. ENDIF
  190. AMOUNT_SPACES = AMOUNT_SPACES / SHOW_AMOUNT
  191. LET CENTER_SPACES = LEFT(SPACES,AMOUNT_SPACES)
  192.  
  193. ;┌───────────────────────────────────────────────────────────────────────────┐
  194. ;│ Check to see if the PPE is already running, if so then skip header disp   │
  195. ;└───────────────────────────────────────────────────────────────────────────┘
  196. FGET 2, LANG_MIN
  197. FGET 2, LANG_SEC
  198. FGET 2, LANG_FILES
  199. FGET 2, BORDER_COLOR
  200. FGET 2, TITLE_COLOR
  201. FGET 2, BAR_COLOR
  202. FGET 2, HEADER
  203. FGET 2, FOOTER
  204. FGET 2, OUT_FOOTER
  205. FGET 2, WHICH_PROT
  206. FGET 2, VIEW_CHAR
  207. FGET 2, REM_CHAR
  208. FGET 2, PROT_CHAR
  209. FGET 2, CONT_CHAR
  210. FGET 2, REM_FILE
  211. FGET 2, COMPRESS1
  212. FGET 2, COMPRESS2
  213. FCLOSE 2
  214.  
  215. ;┌───────────────────────────────────────────────────────────────────────────┐
  216. ;│ If the temp file exists then calculate the time and date of it. Then      │
  217. ;│ compare it to the flagged file list to see if which is older              │
  218. ;└───────────────────────────────────────────────────────────────────────────┘
  219. IF (EXIST(TEMP_FILE)) THEN
  220.     TEMP_DATE = FILEINF(TEMP_FILE,2)
  221.     LET TEMP_TOTAL_DATE = MONTH(TEMP_DATE)*CONSTANT2 + DAY(TEMP_DATE)
  222.     IF (TEMP_TOTAL_DATE < FLIST_TOTAL_DATE) GOTO SKIP
  223.     TEMP_TIME = FILEINF(TEMP_FILE,3)
  224.     LET TEMP_TOTAL_TIME = HOUR(TEMP_TIME)*CONSTANT1 + MIN(TEMP_TIME)*CONSTANT2 + SEC(TEMP_TIME)
  225.     IF (TEMP_TOTAL_TIME < FLIST_TOTAL_TIME) GOTO SKIP
  226.     FOPEN 2, TEMP_FILE, O_RD, S_DN
  227.     FGET 2,TEMP1
  228.     FCLOSE 2
  229. ELSE GOTO SKIP
  230. ENDIF
  231.  
  232. IF (TEMP1 > FLAGCNT()) THEN
  233.    DELETE TEMP_FILE
  234.    GOTO SKIP
  235. ENDIF
  236. IF (TEMP1 = FLAGCNT()) WAIT
  237. :SKIP
  238.  
  239. ;┌───────────────────────────────────────────────────────────────────────────┐
  240. ;│ Create a temp file that will hold the number of files that are flagged    │
  241. ;│ for download.                                                             │
  242. ;└───────────────────────────────────────────────────────────────────────────┘
  243. TEMP1 = 0
  244. FOPEN 2, TEMP_FILE, O_WR, S_DN
  245. FPUT 2, FLAGCNT()
  246. FCLOSE 2
  247. TOTAL_FILE_NUM = FLAGCNT()
  248.  
  249. ;┌───────────────────────────────────────────────────────────────────────────┐
  250. ;│ Check to see if the PPE is already running. If so then dont redisplay     │
  251. ;│ the full header again.                                                    │
  252. ;└───────────────────────────────────────────────────────────────────────────┘
  253. FOPEN 1,FLAG_FILE,O_RW,S_DN
  254. FDEFIN 1
  255. :BACK_TO_TOP
  256. COLOR @X0F
  257. BREAK_FLAG = 0
  258. ANSIPOS 1,5
  259. TEMP = SCRTEXT(3,18,1,FALSE)
  260. IF (TEMP = "└") THEN
  261.      SKIP_FLAG = 1
  262.      ANSIPOS 1,5
  263.      GOTO SKIP_HEADER
  264. ELSE SKIP_FLAG = 0
  265. ENDIF
  266.  
  267. ;┌───────────────────────────────────────────────────────────────────────────┐
  268. ;│ Display the header                                                        │
  269. ;└───────────────────────────────────────────────────────────────────────────┘
  270. IF (GRAFMODE()="R") THEN
  271.     PRINTLN " "
  272.     PRINTLN "!|1K|*"
  273. ENDIF
  274. PRINTLN "@CLS@@POFF@"+BORDER_COLOR+"  ┌──────────────────────────────────────────────────────────────────────────┐"
  275. LET TEMP = STRIPATX(HEADER)
  276. PRINTLN "  │"+LEFT(SPACES,37-(LEN(TEMP)/2))+HEADER+RIGHT(SPACES,37-(LEN(TEMP)/2))+BORDER_COLOR+"│"
  277. PRINT "  │"+TITLE_COLOR
  278.  
  279. ;┌───────────────────────────────────────────────────────────────────────────┐
  280. ;│ Display the sysop configurable file info                                  │
  281. ;└───────────────────────────────────────────────────────────────────────────┘
  282. IF (SHOW_NUM = LANG_YES) PRINT CENTER_SPACES+NUM_COLOR+NUM_WORD
  283. PRINT CENTER_SPACES+LEFT(SPACES,(12-LEN(STRIPATX(FILE_WORD)))/2)+FILE_COLOR+FILE_WORD+LEFT(SPACES,(12-LEN(STRIPATX(FILE_WORD)))/2)+CENTER_SPACES
  284. IF (SHOW_SIZE = LANG_YES) PRINT LEFT(SPACES,SIZE_SPACES)+SIZE_COLOR+SIZE_WORD+LEFT(SPACES,10-SIZE_SPACES-LEN(STRIPATX(SIZE_WORD)))+CENTER_SPACES
  285. IF (SHOW_DATE = LANG_YES) PRINT LEFT(SPACES,DATE_SPACES)+DATE_COLOR+DATE_WORD+LEFT(SPACES,8-DATE_SPACES-LEN(STRIPATX(DATE_WORD)))+CENTER_SPACES
  286. IF (SHOW_TIME = LANG_YES) PRINT LEFT(SPACES,TIME_SPACES)+TIME_COLOR+TIME_WORD+LEFT(SPACES,15-TIME_SPACES-LEN(STRIPATX(TIME_WORD)))+CENTER_SPACES
  287. IF (SHOW_FREE = LANG_YES) PRINT LEFT(SPACES,FREE_SPACES)+FREE_COLOR+FREE_WORD+LEFT(SPACES,4-FREE_SPACES-LEN(STRIPATX(FREE_WORD)))+CENTER_SPACES
  288. IF (SHOW_NOTIME = LANG_YES) PRINT LEFT(SPACES,NOTIME_SPACES)+NOTIME_COLOR+NOTIME_WORD
  289. ANSIPOS 78,3
  290. PRINTLN BORDER_COLOR+"│"
  291.  
  292. ;┌───────────────────────────────────────────────────────────────────────────┐
  293. ;│ Display the bullet bar                                                    │
  294. ;└───────────────────────────────────────────────────────────────────────────┘
  295. PRINT "  │"+BAR_COLOR
  296. IF (SHOW_NUM = LANG_YES ) PRINT LEFT(SPACES,AMOUNT_SPACES-1)+"────"
  297. PRINT CENTER_SPACES+"────────────"+CENTER_SPACES
  298. IF (SHOW_SIZE = LANG_YES) PRINT "──────────"+CENTER_SPACES
  299. IF (SHOW_DATE = LANG_YES) PRINT "────────"+CENTER_SPACES
  300. IF (SHOW_TIME = LANG_YES) PRINT "───────────────"+CENTER_SPACES
  301. IF (SHOW_FREE = LANG_YES) PRINT "────"+CENTER_SPACES
  302. IF (SHOW_NOTIME = LANG_YES) PRINT "───────"
  303. ANSIPOS 78,4
  304. PRINTLN BORDER_COLOR+"│"
  305.  
  306. ;┌───────────────────────────────────────────────────────────────────────────┐
  307. ;│ Since there are files already flagged for download. Find out how many.    │
  308. ;│ If there are more then 10 then position display to only display the last  │
  309. ;│ ten of them.                                                              │
  310. ;└───────────────────────────────────────────────────────────────────────────┘
  311. :SKIP_HEADER
  312. FSEEK 1,0,SEEK_SET(0)
  313. COUNT = TOTAL_FILE_NUM + 1
  314. IF (COUNT>10) THEN
  315.     FOR LOOP = 1 TO (COUNT-10)
  316.          FSEEK 1,83,SEEK_CUR(1)
  317.          FDREAD TEMP,1
  318.          IF (ASC(TEMP)!=0) TEMP1 = ASC(TEMP)
  319.          FDREAD TEMP,1
  320.          IF (ASC(TEMP)!=0) TEMP2 = 256*ASC(TEMP)
  321.          FDREAD TEMP,1
  322.          IF (ASC(TEMP)!=0) TEMP3 =65536*ASC(TEMP)
  323.          BAT_TIME = BAT_TIME + TEMP1 + TEMP2 + TEMP3
  324.          FSEEK 1,43,SEEK_CUR(1)
  325.     NEXT
  326. ELSE COUNT = 10
  327. ENDIF
  328. LET Y = COUNT-9
  329.  
  330. ;┌───────────────────────────────────────────────────────────────────────────┐
  331. ;│ Display the file name, bytes, and transfer time for all the files flagged │
  332. ;└───────────────────────────────────────────────────────────────────────────┘
  333. FOR LOOP= 1 TO COUNT
  334.     GOSUB FILE_LINE
  335.     IF (BREAK_FLAG = 1) BREAK
  336. NEXT
  337.  
  338. ;┌────────────────────────────────────────────────────────────────────────────┐
  339. ;│ Display with blank lines to fill the screen to ten file placements listed  │
  340. ;└────────────────────────────────────────────────────────────────────────────┘
  341. FILE_NUM = Y - 1
  342. FOR LOOP = LOOP TO 10
  343.     GOSUB BLANK_FILE_LINE
  344. NEXT
  345.  
  346. ;┌───────────────────────────────────────────────────────────────────────────┐
  347. ;│ Display the footer of the dispay                                          │
  348. ;└───────────────────────────────────────────────────────────────────────────┘
  349. PRINTLN "  │                                                                          │"
  350. LET TEMP = STRIPATX(FOOTER)
  351. PRINTLN "  │"+LEFT(SPACES,37-(LEN(TEMP)/2))+FOOTER+RIGHT(SPACES,37-(LEN(TEMP)/2))+"│"
  352. PRINT "  │  "+LANG_FILES+": @FFILES:3@"+LEFT(SPACES,12-LEN(STRIPATX(LANG_FILES)))
  353. IF (SHOW_SIZE = LANG_YES) PRINT LEFT(SPACES,10-LEN(STRIPATX(SIZE_WORD)))+SIZE_WORD+": @FBYTES:12@"
  354.  
  355. ;┌───────────────────────────────────────────────────────────────────────────┐
  356. ;│ Calculate the BATCH transfer time and display it on the screen.           │
  357. ;└───────────────────────────────────────────────────────────────────────────┘
  358. IF (SHOW_TIME = LANG_YES) THEN
  359.     PRINT LEFT(SPACES,9-LEN(STRIPATX(TIME_WORD)))+TIME_WORD+": "
  360.     BAT_MIN = BAT_TIME/60
  361.     BAT_SEC = BAT_TIME - BAT_MIN*60
  362.     PRINT STRING(BAT_MIN)+LEFT(SPACES,4-LEN(STRIPATX(LANG_MIN)))+LANG_MIN+" "+TIME_COLOR+STRING(BAT_SEC)+LEFT(SPACES,4-LEN(STRIPATX(LANG_SEC)))+LANG_SEC+" "
  363. ENDIF
  364. ANSIPOS 78,17
  365. PRINTLN BORDER_COLOR+"│"
  366. IF (SKIP_FLAG) THEN
  367.      PRINTLN
  368. ELSE PRINTLN "  └──────────────────────────────────────────────────────────────────────────┘"
  369. ENDIF
  370. :SKIP_FOOTER
  371. PRINTLN LEFT(SPACES,(79-LEN(STRIPATX(OUT_FOOTER)))/2)+OUT_FOOTER+LEFT(SPACES,(79-LEN(STRIPATX(OUT_FOOTER)))/2)
  372. CLREOL
  373. PRINTLN
  374. CLREOL
  375. PRINTLN
  376. CLREOL
  377.  
  378. ;┌───────────────────────────────────────────────────────────────────────────┐
  379. ;│ Position cursor on the screen and ask for file name. Then stuff it into   │
  380. ;│ keyboard buffer and exit                                                  │
  381. ;└───────────────────────────────────────────────────────────────────────────┘
  382. IF (FILE_NUM > 9) FILE_NUM = 9
  383. IF (SHOW_NUM = LANG_YES) EXTRA = 3 + AMOUNT_SPACES
  384. ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
  385. PRINT "             "
  386. ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
  387. LET FILE_NAME = ""
  388. LET FILE_CHAR = ""
  389. FILE_CHAR_NUM = 0
  390.  
  391. ;┌───────────────────────────────────────────────────────────────────────────┐
  392. ;│ Loop for keystrokes. Look for the enter key or backspace key.             │
  393. ;└───────────────────────────────────────────────────────────────────────────┘
  394. WHILE (file_char <> CHR(13)) DO
  395.     UP_FILE_NUM = TOTAL_FILE_NUM
  396.     FILE_CHAR = INKEY() 
  397.     IF (FILE_CHAR = "" ) CONTINUE
  398.     IF (FILE_CHAR = CHR(13)) GOTO STUFF_KEY
  399.     IF (FILE_CHAR_NUM = 12 & FILE_CHAR != CHR(8)) CONTINUE
  400.  
  401. ;┌───────────────────────────────────────────────────────────────────────────┐
  402. ;│ Test to see if key entered was a up or left arrow key                     │
  403. ;└───────────────────────────────────────────────────────────────────────────┘
  404.     IF (FILE_CHAR = "RIGHT" | FILE_CHAR = "UP") THEN
  405.          ANSIPOS 1,19
  406.          PRINT LEFT(SPACES, (78-LEN(STRIPATX(WHICH_PROT)))/2)+WHICH_PROT+LEFT(SPACES, (78-LEN(STRIPATX(WHICH_PROT)))/2)
  407.          ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
  408. :LOOP_UP
  409.          POS_X = GETX()
  410.          POS_Y = GETY()-1
  411.          IF (POS_Y < 5) THEN
  412.               ANSIPOS 1,POS_Y+1
  413.               POS_Y = 5
  414.               IF (UP_FILE_NUM > 0 ) THEN
  415.                    FSEEK 1,0,SEEK_SET(0)
  416.                    FOR LOOP = 1 TO UP_FILE_NUM - 1
  417.                         FSEEK 1,129,SEEK_CUR(1)
  418.                    NEXT
  419.                    Y = UP_FILE_NUM 
  420.                    FOR LOOP = 1 TO 10
  421.                         GOSUB FILE_LINE
  422.                    NEXT
  423.               ELSE INC UP_FILE_NUM
  424.               ENDIF
  425.          ENDIF
  426.          DEC UP_FILE_NUM
  427.          ANSIPOS POS_X,POS_Y
  428.          COLOR @X70
  429.          FILE_CHAR = SCRTEXT(POS_X,POS_Y,12,FALSE)
  430.          FILE_CHAR = TRIM(FILE_CHAR, CHR(32))
  431.          PRINT LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
  432.          ANSIPOS POS_X,POS_Y
  433. :LOOP_UP_KEY
  434.          UP_CHAR = INKEY()
  435.          IF (UPPER(UP_CHAR) = PROT_CHAR) GOTO DISP_PROT
  436.          IF (UPPER(UP_CHAR) = REM_CHAR) GOTO REMOVE_FILE
  437.          IF (UPPER(UP_CHAR) = VIEW_CHAR) GOTO VIEW_FILE
  438.          IF (UPPER(UP_CHAR) = CONT_CHAR) GOTO BACK_TO_TOP
  439.          IF ((UP_CHAR = "DOWN" | UP_CHAR = "LEFT") & POS_Y < 4+FILE_NUM) THEN
  440.               PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
  441.               ANSIPOS POS_X,POS_Y
  442.               GOTO LOOP_DOWN
  443.          ENDIF
  444.          IF (UP_CHAR = "RIGHT" | UP_CHAR = "UP") THEN
  445.               PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
  446.               ANSIPOS POS_X,POS_Y
  447.               GOTO LOOP_UP
  448.          ENDIF
  449.          GOTO LOOP_UP_KEY
  450.     ENDIF
  451.  
  452. ;┌───────────────────────────────────────────────────────────────────────────┐
  453. ;│ Test to see if key entered was a down or right arrow key                  │
  454. ;└───────────────────────────────────────────────────────────────────────────┘
  455.     IF (FILE_CHAR = "LEFT" | FILE_CHAR = "DOWN") THEN
  456.          ANSIPOS 1,19
  457.          PRINT LEFT(SPACES, (78-LEN(STRIPATX(WHICH_PROT)))/2)+WHICH_PROT+LEFT(SPACES, (78-LEN(STRIPATX(WHICH_PROT)))/2)
  458.          ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
  459. :LOOP_DOWN
  460.          POS_X = GETX()
  461.          POS_Y = GETY()+1
  462.          INC UP_FILE_NUM
  463.          IF (POS_Y > 5+FILE_NUM) THEN
  464.              POS_Y = POS_Y - 1
  465.              IF (UP_FILE_NUM > 0 & UP_FILE_NUM < TOTAL_FILE_NUM) THEN
  466.                    ANSIPOS 1,5
  467.                    FSEEK 1,0,SEEK_SET(0)
  468.                    FOR LOOP = 1 TO UP_FILE_NUM-9
  469.                         FSEEK 1,129,SEEK_CUR(1)
  470.                    NEXT
  471.                    Y = UP_FILE_NUM-8
  472.                    FOR LOOP = 1 TO 10
  473.                         GOSUB FILE_LINE
  474.                    NEXT
  475.                ELSE DEC UP_FILE_NUM
  476.                ENDIF
  477.          ENDIF
  478.          ANSIPOS POS_X,POS_Y
  479.          FILE_CHAR = SCRTEXT(POS_X,POS_Y,12,FALSE)
  480.          FILE_CHAR = TRIM(FILE_CHAR, CHR(32))
  481.          COLOR @X70
  482.          PRINT LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
  483.          ANSIPOS POS_X,POS_Y
  484. :LOOP_DOWN_KEY
  485.          DOWN_CHAR = INKEY()
  486.          IF (UPPER(DOWN_CHAR) = PROT_CHAR) GOTO DISP_PROT
  487.          IF (UPPER(DOWN_CHAR) = REM_CHAR) GOTO REMOVE_FILE
  488.          IF (UPPER(DOWN_CHAR) = VIEW_CHAR) GOTO VIEW_FILE
  489.          IF (UPPER(DOWN_CHAR) = CONT_CHAR) GOTO BACK_TO_TOP
  490.          IF (DOWN_CHAR = "RIGHT" | DOWN_CHAR = "UP") THEN
  491.               PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
  492.               ANSIPOS POS_X,POS_Y
  493.               GOTO LOOP_UP
  494.          ENDIF
  495.          IF (DOWN_CHAR = "DOWN" | DOWN_CHAR = "LEFT")  THEN
  496.                PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
  497.                ANSIPOS POS_X,POS_Y
  498.                GOTO LOOP_DOWN
  499.          ENDIF   
  500.          GOTO LOOP_DOWN_KEY
  501.     ENDIF
  502.  
  503. ;┌───────────────────────────────────────────────────────────────────────────┐
  504. ;│ Handle the Backspace key to move backwards and also remove the character. │
  505. ;└───────────────────────────────────────────────────────────────────────────┘
  506.     IF (FILE_CHAR = CHR(8)) THEN
  507.          DEC FILE_CHAR_NUM
  508.          IF (FILE_CHAR_NUM <0) THEN
  509.               FILE_CHAR_NUM = 0
  510.               GOTO SKIP_FILE_CHAR
  511.          ENDIF
  512.          FILE_NAME = LEFT(FILE_NAME,FILE_CHAR_NUM)
  513.          PRINT FILE_CHAR+" "+FILE_CHAR
  514.     ELSE 
  515.          INC FILE_CHAR_NUM
  516.          FILE_NAME = FILE_NAME + FILE_CHAR
  517.          PRINT FILE_CHAR
  518.     ENDIF
  519. :SKIP_FILE_CHAR
  520. ENDWHILE
  521.  
  522. :STUFF_KEY
  523. ANSIPOS 1,19
  524. CLREOL
  525. FILE_NAME=TRIM(FILE_NAME,CHR(32))
  526. IF (LEN(FILE_NAME) = 0) FILE_NAME = CHR(13)
  527. :STUFF_KEY2
  528. FCLOSE 1
  529. KBDSTUFF file_name
  530. :EXIT
  531. END
  532.  
  533. ;┌───────────────────────────────────────────────────────────────────────────┐
  534. ;│ Remove the Chosen file from the batch                                     │
  535. ;└───────────────────────────────────────────────────────────────────────────┘
  536. :REMOVE_FILE
  537. COLOR @X0F
  538. POS_X = GETX()
  539. POS_Y = GETY()
  540. FILE_CHAR = SCRTEXT(POS_X,POS_Y,12,FALSE)
  541. FILE_CHAR = TRIM(FILE_CHAR, CHR(32))
  542. ANSIPOS 1,19
  543. PRINT LEFT(SPACES, (78-LEN(STRIPATX(REM_FILE)))/2)+REM_FILE+LEFT(SPACES, (78-LEN(STRIPATX(REM_FILE)))/2)
  544. FSEEK 1,0,SEEK_SET(0)
  545. FOR LOOP = 1 TO 100000
  546.    FSEEK 1,66,SEEK_CUR(1)
  547.    FDREAD FILE_NAME,13
  548.    IF (FILE_NAME = FILE_CHAR) GOTO SKIP_ERROR
  549.    IF (FERR(1)) BREAK
  550.    FSEEK 1,50,SEEK_CUR(1)
  551. NEXT
  552. PRINT FILE_COLOR+LEFT(SPACES,12-LEN(FILE_CHAR))+FILE_CHAR
  553. ANSIPOS 1,19
  554. PRINT LEFT(SPACES,(79-LEN(STRIPATX(OUT_FOOTER)))/2)+OUT_FOOTER+LEFT(SPACES,(79-LEN(STRIPATX(OUT_FOOTER)))/2)
  555. ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
  556. GOTO SKIP_FILE_CHAR
  557. :SKIP_ERROR
  558. NUM_BYTES = (LOOP-1)*129+1
  559. FSEEK 1,num_bytes+128,SEEK_SET(0)
  560. WHILE (!FERR(1)) DO
  561.    FREAD 1,REMOVE_CHAR,1
  562.    IF (FERR(1) ) BREAK
  563.    FSEEK 1,-130,SEEK_CUR(1)
  564.    FWRITE 1,REMOVE_CHAR,1
  565.    FSEEK 1,129,SEEK_CUR(1)
  566. ENDWHILE
  567. FSEEK 1,-129,SEEK_CUR(1)
  568. FOR LOOP = 1 TO 129
  569.    FWRITE 1,"",1
  570. NEXT
  571. FFLUSH 1
  572. GOTO BACK_TO_TOP
  573.  
  574. ;┌───────────────────────────────────────────────────────────────────────────┐
  575. ;│ Use PKUNZIP to view the contents of the chosed file                       │
  576. ;└───────────────────────────────────────────────────────────────────────────┘
  577. :VIEW_FILE
  578. COLOR @X0F
  579. POS_X = GETX()
  580. POS_Y = GETY()
  581. FILE_CHAR = SCRTEXT(POS_X,POS_Y,12,FALSE)
  582. FILE_CHAR = TRIM(FILE_CHAR, CHR(32))
  583. IF (LEN(FILE_CHAR) = 0 ) GOTO BACK_TO_TOP
  584. ;FCLOSE 1
  585. ;FOPEN 1,FLAG_FILE,O_RD,S_DN
  586. ;FDEFIN 1
  587. FSEEK 1,0,SEEK_SET(0)
  588. WHILE (!FERR(1) ) DO
  589.    FSEEK 1,66,SEEK_CUR(1)
  590.    FREAD 1,FILE_NAME,13
  591.    IF (FILE_NAME = FILE_CHAR) BREAK
  592.    FSEEK 1,50,SEEK_CUR(1)
  593. ENDWHILE
  594. FSEEK 1,-79,SEEK_CUR(1)
  595. FREAD 1,FILE_NAME,65
  596. FILE_NAME = TRIM(FILE_NAME,CHR(32))
  597. IF (UPPER(RIGHT(FILE_NAME,3)) = "ZIP") THEN
  598.     SHELL TRUE,LOOP,COMPRESS1,FILE_NAME+" -vbn >"+GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST.LST"
  599.     SEARCH_TEXT = "Searching ZIP:" 
  600. ELSE IF (UPPER(RIGHT(FILE_NAME,3)) = "ARJ") THEN
  601.     SHELL TRUE,LOOP,COMPRESS2,"l "+FILE_NAME+" >"+GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST.LST"
  602.     SEARCH_TEXT = "Processing arc" 
  603. ENDIF
  604. FOPEN 3,GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST.LST",O_RD,S_DN
  605. CLS
  606. PRINT "@POFF@"
  607. WHILE (LEFT(FILE_NAME,14) != Search_TEXT) DO
  608.     FGET 3,FILE_NAME
  609.     IF (FERR(3)) THEN
  610.          FCLOSE 3
  611.          GOTO BACK_TO_TOP
  612.     ENDIF
  613. ENDWHILE
  614. WHILE (!FERR(3)) DO
  615.     FGET 3,FILE_NAME
  616.     PRINTLN FILE_NAME
  617. ENDWHILE
  618. FCLOSE 3
  619. WAIT
  620. GOTO BACK_TO_TOP
  621.  
  622. ;┌───────────────────────────────────────────────────────────────────────────┐
  623. ;│ Display Available Protocols to the User and Use Prompt #280 from PCBTEXT  │
  624. ;│ that is being used to ask which protocol to use                           │
  625. ;└───────────────────────────────────────────────────────────────────────────┘
  626. :DISP_PROT
  627. COLOR @X07
  628. PROT_DAT = READLINE(PCBDAT(),45)
  629. CLS
  630. FOPEN 5,prot_dat,O_RD,S_DN
  631. :PROT_LOOP
  632. FGET 5, PROT_NAME
  633. IF (FERR(5)) THEN
  634.     FCLOSE 5
  635.     PROMPTSTR 280,file_name,1,AVAIL_PROT+"Nn",LFAFTER
  636.     IF (TRIM(FILE_NAME,CHR(32)) =  "") FILE_NAME = "N"
  637.     GOTO STUFF_KEY2
  638. ENDIF
  639. AVAIL_PROT = AVAIL_PROT+LEFT(PROT_NAME,1)
  640. AVAIL_PROT = AVAIL_PROT+LOWER(LEFT(PROT_NAME,1))
  641. PRINT "("+LEFT(PROT_NAME,1)+") "
  642. PROT_NAME = RIGHT(PROT_NAME, LEN(PROT_NAME)-INSTR(PROT_NAME,","))
  643. PROT_NAME = RIGHT(PROT_NAME, LEN(PROT_NAME)-INSTR(PROT_NAME,","))
  644. PROT_NAME = RIGHT(PROT_NAME, LEN(PROT_NAME)-INSTR(PROT_NAME,","))
  645. PRINTLN LEFT(PROT_NAME,INSTR(PROT_NAME,",")-1)
  646. GOTO PROT_LOOP
  647.  
  648. ;┌───────────────────────────────────────────────────────────────────────────┐
  649. ;│ Display Line of File Stats                                                │
  650. ;└───────────────────────────────────────────────────────────────────────────┘
  651. :FILE_LINE
  652. TEMP1 = 0
  653. TEMP2 = 0
  654. TEMP3 = 0
  655. FREAD 1,TEMP,66
  656. IF (FERR(1) | TEMP = "") THEN
  657.     BREAK_FLAG = 1
  658.     RETURN
  659. ENDIF
  660. TEMP = TRIM(TEMP,CHR(32))
  661. FILE_DATE = FILEINF(TEMP,2)
  662. FDREAD FILE_NAME,13
  663. FDREAD TEMP,1
  664. IF (ASC(TEMP)!=0) TEMP1 = ASC(TEMP)
  665. FDREAD TEMP,1
  666. IF (ASC(TEMP)!=0) TEMP2 = 256*ASC(TEMP)
  667. FDREAD TEMP,1
  668. IF (ASC(TEMP)!=0) TEMP3 =65536*ASC(TEMP)
  669. FILE_SIZE = TEMP1+TEMP2+TEMP3
  670. TEMP1 = 0
  671. TEMP2 = 0
  672. TEMP3 = 0
  673. FSEEK 1,1,SEEK_CUR(1)
  674. FDREAD TEMP,1
  675. IF (ASC(TEMP)!=0) TEMP1 = ASC(TEMP)
  676. FDREAD TEMP,1
  677. IF (ASC(TEMP)!=0) TEMP2 = 256*ASC(TEMP)
  678. FDREAD TEMP,1
  679. IF (ASC(TEMP)!=0) TEMP3 =65536*ASC(TEMP)
  680. FILE_SEC = TEMP1 + TEMP2 + TEMP3
  681. BAT_TIME = BAT_TIME + FILE_SEC
  682. FSEEK 1,9,SEEK_CUR(1)
  683. FDREAD FREE_FILE,1
  684. FDREAD NO_TIME,1
  685. FSEEK 1,32,SEEK_CUR(1)
  686. FILE_MIN = FILE_SEC/60
  687. FILE_SEC = FILE_SEC - FILE_MIN*60
  688. PRINT BORDER_COLOR+"  │"
  689. IF (SHOW_NUM = LANG_YES ) PRINT CENTER_SPACES+NUM_COLOR+LEFT(SPACES,2-LEN(STRING(Y)))+STRING(Y)+" "
  690. PRINT CENTER_SPACES+FILE_COLOR+LEFT(SPACES,12-LEN(FILE_NAME))+FILE_NAME+CENTER_SPACES
  691. IF (SHOW_SIZE = LANG_YES) PRINT LEFT(SPACES,10-LEN(STRING(FILE_SIZE)))+SIZE_COLOR+STRING(FILE_SIZE)+CENTER_SPACES
  692. IF (SHOW_DATE = LANG_YES) PRINT DATE_COLOR+STRING(FILE_DATE)+CENTER_SPACES
  693. IF (SHOW_TIME = LANG_YES) PRINT TIME_COLOR+LEFT(SPACES,4-LEN(STRING(FILE_MIN)))+STRING(FILE_MIN)+LEFT(SPACES,4-LEN(STRIPATX(LANG_MIN)))+LANG_MIN+TIME_COLOR+LEFT(SPACES,3-LEN(STRING(FILE_SEC)))+STRING(FILE_SEC)+LEFT(SPACES,4-LEN(STRIPATX(LANG_SEC)))+LANG_SEC+CENTER_SPACES
  694. IF (SHOW_FREE = LANG_YES) THEN
  695.    IF (ASC(FREE_FILE)=1) THEN
  696.       PRINT FREE_COLOR+"  "+LANG_YES
  697.    ELSE PRINT FREE_COLOR+"  "+LANG_NO
  698.    ENDIF
  699.    PRINT CENTER_SPACES
  700. ENDIF
  701. IF (SHOW_NOTIME = LANG_YES) THEN
  702.    IF (ASC(NO_TIME)=1) THEN
  703.        PRINT NOTIME_COLOR+"    "+LANG_YES
  704.    ELSE PRINT NOTIME_COLOR+"    "+LANG_NO
  705.    ENDIF
  706. ENDIF
  707. ANSIPOS 78,4+LOOP
  708. PRINTLN BORDER_COLOR+"│"
  709. ANSIPOS 1,5+LOOP
  710. INC Y
  711. :BACK_FILE_LINE
  712. RETURN
  713.  
  714. ;┌───────────────────────────────────────────────────────────────────────────┐
  715. ;│ Display Blank Line of File Stats                                          │
  716. ;└───────────────────────────────────────────────────────────────────────────┘
  717. :BLANK_FILE_LINE
  718. PRINT BORDER_COLOR+"  │"
  719. IF (SHOW_NUM = LANG_YES ) PRINT CENTER_SPACES+NUM_COLOR+LEFT(SPACES,2-LEN(STRING(Y)))+STRING(Y)+" "
  720. PRINT CENTER_SPACES+"            "
  721. IF (SHOW_SIZE = LANG_YES) PRINT SIZE_COLOR+CENTER_SPACES+"         0"
  722. IF (SHOW_DATE = LANG_YES) PRINT DATE_COLOR+CENTER_SPACES+"00-00-00"
  723. IF (SHOW_TIME = LANG_YES) PRINT TIME_COLOR+CENTER_SPACES+"   0"+LEFT(SPACES,4-LEN(STRIPATX(LANG_MIN)))+LANG_MIN+TIME_COLOR+"  0"+LEFT(SPACES,4-LEN(STRIPATX(LANG_SEC)))+LANG_SEC
  724. ANSIPOS 78,4+LOOP
  725. PRINTLN BORDER_COLOR+"│"
  726. INC Y
  727. IF (SKIP_FLAG) THEN
  728.     ANSIPOS 1,19
  729.     GOTO SKIP_FOOTER
  730. ENDIF
  731. RETURN